package com.sgcc.pda.secretkey;

/**
 * 描 述：秘钥协商管理类
 * 作 者：王贵重
 * 时 间： 2020-03-04 13:40
 * 邮 箱：wanggz@bjhzwq.com
 * 版 本：1.0
 * 版 权：Copyright (c) 2020 remarkables-united.Co.Ltd. All rights reserved.
 */
public class SecretKeyManager {

    private static String kid = "08090304";//跟安全单元厂商沟通，确认为固定值

    private static class SecretKeyManagerHolder{
        //静态初始化器，由JVM来保证线程安全
        private static SecretKeyManager instance=new SecretKeyManager();
    }

    //私有化构造方法
    private SecretKeyManager(){}

    public static SecretKeyManager getInstance(){
        return SecretKeyManagerHolder.instance;
    }

    /**
     * 秘钥协商
     */
    public String secretkey(){
//        //1.获取保存的外设设备信息
//        //ESAM序列号
//        String esamNum = sp.getWSWesamNum();
//        //ASCTR单地址应用协商计数器 需要+1
//        String jsq = sp.getWSJSQ();
//        //2.根据安全单元信息请求密文 1
//        StringBuilder sb = new StringBuilder();
//        if(getSafetyUnit2M1S1(kid,esamNum,jsq,sb)){
//            if(sb.length()  ==  36*2){
//                String m1 = sb.substring(0,64);
//                String mac1 = sb.substring(64);
////               调用协议，封装秘钥协商报文
//                //Frame 组装
//            }else{
//                //提示失败
//            }
//        }else{
//            //提示失败
//        }
        return "";
    }

    /**
     * 秘钥协商
     */
    public boolean secretkeyConfirm(String m2,String mac2){
//        //1.获取保存的外设设备信息
//        //ESAM序列号
//        String esamNum = sp.getWSWesamNum();
//        if(mixsSafetyUnit(kid,esamNum,m2,mac2)){
//            return true;
//        }else{
//            //提示失败
            return false;
//        }
    }

//
//    /**
//     * 通过安全单元获取密文1和mac1
//     * 安全单元2.0
//     *
//     * @param kid      安全单元密钥协商（获取密文1+mac1）需要该参数，目前暂不知如何定义
//     * @param wesamNum 外设wesam的序列号
//     * @param hhxsjsq  外设返回会话计数器
//     * @return
//     */
//    private boolean getSafetyUnit2M1S1(ISafetyUnit2 safetyUnit2 ,String kid, String wesamNum, String hhxsjsq,StringBuilder sb) {
//        StringBuffer M1 = new StringBuffer();
//        StringBuffer Mac1 = new StringBuffer();
//        int ret = safetyUnit2.wsSecretXieShang(kid, wesamNum, hhxsjsq, M1, Mac1);
//        if (ret == 0) {
//            String m1 = M1.toString();
//            String mac1 = Mac1.toString();
//            sb.append(m1);
//            sb.append(mac1);
//            return true;
//        } else {
//            sb.append("从安全单元获取密文1,MAC1失败");
//            return false;
//        }
//    }


//    /**
//     * 安全单元2.0密钥协商确认
//     *
//     * @param kid
//     * @param wesamNum wesum序列号
//     * @param m2       外设返回的密文2
//     * @param mac2     外设返回的Mac2
//     * @return true：秘钥协商成功  false秘钥协商失败
//     */
//    private boolean mixsSafetyUnit(String kid, String wesamNum, String m2, String mac2) {
//        int ret = safetyUnit.wsSecretXieShangConfirm(kid, wesamNum, m2, mac2);
//        if (ret == 0) {
////            ToastUtils.showToast(this, "安全单元密钥协商成功");
////            LogUtil.e(TAG, "安全单元密钥协商成功");
//            return true;
//        } else {
////            ToastUtils.showToast(this, "安全单元密钥协商失败");
////            LogUtil.e(TAG, "安全单元密钥协商失败");
//            return false;
//        }
//    }
}
